package br.com.foxinline.modelo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;

/**
 *
 * @author laverson
 */
@Entity
public class ProtocoloItem implements Serializable {

    @Id
    @SequenceGenerator(name = "seq_protocolo_item", sequenceName = "seq_protocolo_item", allocationSize=1 )
    @GeneratedValue(generator = "seq_protocolo_item", strategy = GenerationType.SEQUENCE)
    private Long id;
    
    @OneToMany(cascade= CascadeType.MERGE)
    private List<Selo> selos;
    
    @OneToOne
    private Ato atoItem;

    @Column(scale=2, precision=14)
    @NotNull
    @DecimalMin( value = "0.00" )
    private BigDecimal valorCartorio;
    
    @Column(scale=2, precision=14)
    @NotNull
    @DecimalMin( value = "0.00" )
    private BigDecimal valorFermojupi;
    
    @Column(scale= 2, precision=19)
    @NotNull
    @DecimalMin( value = "0.00" )
    @Digits( fraction = 2, integer = 10 )
    private BigDecimal valor;
    
    @OneToMany(cascade= CascadeType.ALL)
    private List<ProtocoloCampo> protocoloCampos;
        
    @OneToOne
    private Livro livro;
    
    private String folhas;
    
    private boolean selado = false;

    public String valorFormatado() {
        return "xuxa";
    }
    
    public ProtocoloItem() {}
    
    public ProtocoloItem(Long id, List<Selo> selos, Ato atoItem, BigDecimal valorCartorio, BigDecimal valorFermojupi, BigDecimal valor, List<ProtocoloCampo> protocoloCampos, Livro livro, String folhas) {
        this.id = id;
        this.selos = selos;
        this.atoItem = atoItem;
        this.valorCartorio = valorCartorio;
        this.valorFermojupi = valorFermojupi;
        this.valor = valor;
        this.protocoloCampos = protocoloCampos;
        this.livro = livro;
        this.folhas = folhas;
    }

    public Ato getAtoItem() {
        return atoItem;
    }

    public void setAtoItem(Ato atoItem) {
        this.atoItem = atoItem;
    }

    public String getFolhas() {
        return folhas;
    }

    public void setFolhas(String folhas) {
        this.folhas = folhas;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Livro getLivro() {
        return livro;
    }

    public void setLivro(Livro livro) {
        this.livro = livro;
    }

    public List<ProtocoloCampo> getProtocoloCampos() {
        return protocoloCampos;
    }

    public void setProtocoloCampos(List<ProtocoloCampo> protocoloCampos) {
        this.protocoloCampos = protocoloCampos;
    }

    public boolean isSelado() {
        return selado;
    }

    public void setSelado(boolean selado) {
        this.selado = selado;
    }

    public List<Selo> getSelos() {
        return selos;
    }

    public void setSelos(List<Selo> selos) {
        this.selos = selos;
    }

    public BigDecimal getValor() {
        return valor;
    }

    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }

    public BigDecimal getValorCartorio() {
        return valorCartorio;
    }

    public void setValorCartorio(BigDecimal valorCartorio) {
        this.valorCartorio = valorCartorio;
    }

    public BigDecimal getValorFermojupi() {
        return valorFermojupi;
    }

    public void setValorFermojupi(BigDecimal valorFermojupi) {
        this.valorFermojupi = valorFermojupi;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ProtocoloItem other = (ProtocoloItem) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if (this.selos != other.selos && (this.selos == null || !this.selos.equals(other.selos))) {
            return false;
        }
        if (this.atoItem != other.atoItem && (this.atoItem == null || !this.atoItem.equals(other.atoItem))) {
            return false;
        }
        if (this.valorCartorio != other.valorCartorio && (this.valorCartorio == null || !this.valorCartorio.equals(other.valorCartorio))) {
            return false;
        }
        if (this.valorFermojupi != other.valorFermojupi && (this.valorFermojupi == null || !this.valorFermojupi.equals(other.valorFermojupi))) {
            return false;
        }
        if (this.valor != other.valor && (this.valor == null || !this.valor.equals(other.valor))) {
            return false;
        }
        if (this.protocoloCampos != other.protocoloCampos && (this.protocoloCampos == null || !this.protocoloCampos.equals(other.protocoloCampos))) {
            return false;
        }
        if (this.livro != other.livro && (this.livro == null || !this.livro.equals(other.livro))) {
            return false;
        }
        if ((this.folhas == null) ? (other.folhas != null) : !this.folhas.equals(other.folhas)) {
            return false;
        }
        if (this.selado != other.selado) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 23 * hash + (this.id != null ? this.id.hashCode() : 0);
        hash = 23 * hash + (this.selos != null ? this.selos.hashCode() : 0);
        hash = 23 * hash + (this.atoItem != null ? this.atoItem.hashCode() : 0);
        hash = 23 * hash + (this.valorCartorio != null ? this.valorCartorio.hashCode() : 0);
        hash = 23 * hash + (this.valorFermojupi != null ? this.valorFermojupi.hashCode() : 0);
        hash = 23 * hash + (this.valor != null ? this.valor.hashCode() : 0);
        hash = 23 * hash + (this.protocoloCampos != null ? this.protocoloCampos.hashCode() : 0);
        hash = 23 * hash + (this.livro != null ? this.livro.hashCode() : 0);
        hash = 23 * hash + (this.folhas != null ? this.folhas.hashCode() : 0);
        hash = 23 * hash + (this.selado ? 1 : 0);
        return hash;
    }

    @Override
    public String toString() {
        return "ProtocoloItem{" + "id=" + id + ", selos=" + selos + ", atoItem=" + atoItem + ", valorCartorio=" + valorCartorio + ", valorFermojupi=" + valorFermojupi + ", valor=" + valor + ", protocoloCampos=" + protocoloCampos + ", livro=" + livro + ", folhas=" + folhas + ", selado=" + selado + '}';
    }

}
